package com.carrental.search.model.document;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.annotations.GeoPointField;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 车辆索引文档模型
 * 用于存储车辆的详细信息，便于搜索和展示
 */
@Data
@Document(indexName = "#{@environment.getProperty('search.indices.vehicle.name')}")
public class VehicleDocument implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 车辆ID
     */
    @Id
    private Long id;

    /**
     * 车辆名称
     */
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String name;

    /**
     * 车辆品牌
     */
    @Field(type = FieldType.Keyword)
    private String brand;

    /**
     * 车辆型号
     */
    @Field(type = FieldType.Keyword)
    private String model;

    /**
     * 车辆类型
     */
    @Field(type = FieldType.Keyword)
    private String type;

    /**
     * 车辆颜色
     */
    @Field(type = FieldType.Keyword)
    private String color;

    /**
     * 车牌号
     */
    @Field(type = FieldType.Keyword)
    private String plateNumber;

    /**
     * 座位数
     */
    @Field(type = FieldType.Integer)
    private Integer seats;

    /**
     * 发动机类型
     */
    @Field(type = FieldType.Keyword)
    private String engineType;

    /**
     * 变速箱类型
     */
    @Field(type = FieldType.Keyword)
    private String transmissionType;

    /**
     * 燃油类型
     */
    @Field(type = FieldType.Keyword)
    private String fuelType;

    /**
     * 日租金
     */
    @Field(type = FieldType.Double)
    private BigDecimal dailyRent;

    /**
     * 车辆状态（0-维护中，1-可用，2-已租出）
     */
    @Field(type = FieldType.Integer)
    private Integer status;

    /**
     * 车辆图片URL列表
     */
    @Field(type = FieldType.Keyword)
    private List<String> images;

    /**
     * 车辆所在门店ID
     */
    @Field(type = FieldType.Long)
    private Long storeId;

    /**
     * 车辆所在门店名称
     */
    @Field(type = FieldType.Keyword)
    private String storeName;

    /**
     * 车辆所在位置
     */
    @GeoPointField
    private GeoPoint location;

    /**
     * 车辆描述
     */
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String description;

    /**
     * 特性和配置列表
     */
    @Field(type = FieldType.Keyword)
    private List<String> features;

    /**
     * 生产年份
     */
    @Field(type = FieldType.Integer)
    private Integer year;

    /**
     * 行驶里程（公里）
     */
    @Field(type = FieldType.Double)
    private Double mileage;

    /**
     * 车辆评分（1-5分）
     */
    @Field(type = FieldType.Float)
    private Float rating;

    /**
     * 评价数量
     */
    @Field(type = FieldType.Integer)
    private Integer ratingCount;

    /**
     * 租赁次数
     */
    @Field(type = FieldType.Integer)
    private Integer rentalCount;

    /**
     * 是否推荐
     */
    @Field(type = FieldType.Boolean)
    private Boolean recommended;

    /**
     * 热门指数 - 综合多种因素计算的热门程度
     */
    @Field(type = FieldType.Double)
    private Double hotIndex;
    
    /**
     * 浏览次数
     */
    @Field(type = FieldType.Integer)
    private Integer viewCount;

    /**
     * 创建时间
     */
    @Field(type = FieldType.Date)
    private Date createTime;

    /**
     * 更新时间
     */
    @Field(type = FieldType.Date)
    private Date updateTime;
} 